<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="../style.css" type="text/css" media="all">
</head>
<body>
<h1>1.2. Множественное наследование</h1>

<div>
	<p>На основе класса <a href="../classes/Module.html">Module</a> в CMS реализовано
	множественное наследование для модулей.</p>

	<p>Для расширения базового класса модуля, находящегося в файле class.php, в одном из
	его методов (настоятельно рекомендуется делать это в конструкторе) нужно вызвать
	метод <a href="../classes/Module.html#extend">extend</a> (метод родительского класса Module).
	В качестве параметра нужно указать имя подключаемого класса, совпадающее с названием файла,
	содержащего этот класс, в каталоге с модулем. Например, если в конструкторе модуля <i>blogs</i>
	вызвать <i>$this->extend ('__blog_mail');</i>, то он подключит файл
	<i>~/explay/modules/blogs/__blog_mail.php</i> с реализацией класса <i>__blog_mail</i>.</p>

	<p>При расширении базового класса, обращение к неопределенным в нем методам будет перенаправлено
	на один из объектов подключенных классов, в котором реализован заданный метод.</p>

	<p><b>Внимание!</b> Если в подключаемом классе реализованы методы, существующие в базовом, то они будут
	переопределены.</p>
	
	<p>Пример:</p>
</div>
<div class="sample">
<div class="sample_content">
<code><span style="color: #000000"> Файл&nbsp;class.php: <br /><span style="color: #0000BB">&lt;?php <br /> <br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">mymodule&nbsp;</span><span style="color: #007700">extends&nbsp;</span><span style="color: #0000BB">Module&nbsp;</span><span style="color: #007700">{ <br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">__construct&nbsp;</span><span style="color: #007700">()&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">parent</span><span style="color: #007700">::</span><span style="color: #0000BB">__construct&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">__CLASS__</span><span style="color: #007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">extend&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">'__hook_mymodule'</span><span style="color: #007700">); <br />&nbsp;&nbsp;&nbsp;&nbsp;} <br />} <br /> <br /></span><span style="color: #0000BB">?&gt; <br /></span> <br />Файл&nbsp;__hook_mymodule.php: <br /><span style="color: #0000BB">&lt;?php <br /> <br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">__hook_mymodule&nbsp;</span><span style="color: #007700">extends&nbsp;</span><span style="color: #0000BB">Module&nbsp;</span><span style="color: #007700">{ <br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">__construct&nbsp;</span><span style="color: #007700">()&nbsp;{ <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">parent</span><span style="color: #007700">::</span><span style="color: #0000BB">__construct&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">'mymodule'</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Рекомендовано&nbsp;для&nbsp;обратной&nbsp;совместимости <br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">} <br /> <br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">foo&nbsp;</span><span style="color: #007700">()&nbsp;{&nbsp;</span><span style="color: #FF8000">/*...*/&nbsp;</span><span style="color: #007700">} <br />} <br /> <br /></span><span style="color: #0000BB">?&gt; <br /></span> <br />Теперь&nbsp;можно&nbsp;обратиться&nbsp;к&nbsp;модулю&nbsp;mymodule&nbsp;так:&nbsp;example.com/mymodule/foo</span> </code> 
</div>
</div>

</body>
</html>